home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-10-01 | 15.8 KB | 342 lines | [ttro/ttxt] |
- Ruler
-
- A Programmer's Tool
-
-
- Version 1.3.5
- July 29, 1994
-
- © 1994, Digital Objectives
- All Rights Reserved
-
-
- John Dunning
- Digital Objectives
- 1661 Route 22 West
- Bound Brook, NJ 08805
-
- Internet: jdunning@phoenix.princeton.edu
-
-
- DISTRIBUTION
-
- This application is distributed as MailWare: if you use it and like it,
- drop me a note (email or snail mail). If you don't like it, tell me why
- and how I can make it better.
-
- You may freely use and distribute copies of this software as long as you
- don't alter it or this documentation in any way and don't charge for its
- use (the MacHack '94 CD excepted).
-
-
- DISCLAIMER
-
- This software comes completely without any warranty. Use it at your own
- risk. If bad things happen to you or your Newton as a result of using
- this software, I'll feel sorry, but that's the extent of my liability.
-
-
- INSTALLATION
-
- Install ruler as you would any other Newton application. It requires
- 46,060 bytes. The first time its run, ruler will create a preferences
- entry in the System soup, if there isn't one already. The entry has the
- tag "Ruler:DigObj", in case you ever want to remove it.
-
-
- NOTE
-
- This utility is intended primarily for developers using NTK or
- BookMaker. If you're not a developer, you probably won't find it of much
- use.
-
-
- OVERVIEW
-
- If you've used the Newton ToolKit for any amount of time, you'll quickly
- find that the layout display in the current version has a number of
- bugs. Views which are not justified from their parent's left and top
- edges will not appear in the correct position when displayed in NTK,
- although they'll be fine on the Newton. Positioning these views where
- you want them generally requires that you fiddle with them in NTK,
- compile the project, download it to the Newton, check the view's position,
- and so on through the cycle, until you get it right.
-
- That process isn't unbearable, but what makes it even harder is that
- there's been no easy way to determine a view's position on the Newton.
- If two views don't quite line up, you've got to squint and try to count
- the pixels to figure out how far they should be moved in NTK. Recently a
- screen-capture capability has been added to NTK, so you could also
- capture the Newton screen, paste it into a graphics application like
- Photoshop and count the pixels there. But that's also cumbersome.
-
- Ruler is intended to simply this process. It's a little utility that
- displays two crosshairs on the Newton screen. Their position, and the
- distance between them, is displayed on a floating palette. You can
- position the crosshairs by dragging them with the pen. That's
- pretty much all it does, but it does it well.
-
-
- MOVING THE CROSSHAIRS
-
- Using Ruler is quite simple. Tapping its icon in the Extras Drawer
- opens a wide, narrow floating palette. From left to right, there's a
- standard scroller, two outlined X/Y displays, one width/height display,
- and a group of four buttons.
-
- When the palette is open, tapping anywhere on the screen (other than on the
- palette, of course) will move the active crosshair to the point you tapped.
- If the active crosshair isn't visible, it'll appear where you tapped.
- Dragging the pen across the screen will move the crosshair continuously.
- You cannot move it outside the visible bounds of the screen (except under
- certain conditions described below).
-
- The crosshair's current X and Y coordinates are continuously displayed in
- its readout on the palette. If a position display shows two dashes instead
- of numbers, that means the crosshair has not been positioned yet. Tap on
- the screen to position it.
-
- Besides tapping and dragging, you can also position the crosshair using the
- scroller. Tapping on any of the four arrows on the scroller will move the
- crosshair one pixel in that direction. The crosshair will move
- continuously if you hold down the pen. By tapping on the scroller and
- dragging the pen away from it, you can increase the speed at which the
- crosshair moves. The farther you move the pen from the scoller, the faster
- the crosshair will move.
-
- The crosshair is XOR'd against the screen, which means that it will
- appear white where it crosses a black pixel on the screen, and black
- where it crosses a white pixel.
-
- You can have two crosshairs on the screen at once. Each has a position
- display on the palette. There can be only one active crosshair on the
- screen at a time. The active crosshair is drawn in solid black lines, and
- its display is outlined in black. The inactive crosshair is drawn in
- grey, with a grey-outlined display. Tapping on the screen or using the
- scroller will always move the active crosshair; the inactive one will
- stay where it is.
-
- To make an inactive crosshair active, tap on its display on the palette.
- The display will highlight, its outline will turn black, and the
- crosshair will also turn black. The currently active crosshair will turn
- grey and become inactive.
-
- If you tap on the active display, it will become inactive, so that both
- crosshairs are inactive. When this happens, the crosshairs behave a little
- differently. Tapping on the scroller will move the crosshairs together, so
- they'll maintain their relative positions. If you tap on the screen, the
- top left corner of the box formed by the crosshairs will move to the point
- you tapped. Dragging will move the crosshairs as a unit. If you drag the
- crosshairs off the screen, their coordinates will be clipped to the visible
- bounds of the screen. But as long as you don't lift the pen, you can drag
- them back. If you do lift the pen, the crosshairs will move so that
- they're visible on the screen, changing their relative positions.
-
- Note that if you align the crosshairs horizontally or vertically and
- inactivate them both, the aligned horizontal or vertical portions of the
- crosshairs will disappear. If you don't want this to happen, offset the
- crosshairs by one pixel, or activate one of them.
-
-
- WIDTH/HEIGHT DISPLAY
-
- When both crosshairs are visible, the width and height of the square they
- form, in pixels, is displayed on the third readout, the one with no
- border.
-
- There is a second mode for this readout. Tapping on the button with a
- diamond on it will display a popup menu. Two of the options on the menu
- are "Measure pixels" and "Measure offset." Selecting "Measure offset" will
- change the W/H display to an X/Y display. This mode is discussed in more
- detail below.
-
-
- BUTTONS
-
- There is a group of four buttons on the right end of the palette. The
- bottom right button is the standard close box. Tapping it quits Ruler.
-
- The top right button (a tiny square) toggles between the full-size palette
- and an iconified mode. In the iconified mode, the crosshairs are hidden
- and the palette shrinks to a tiny square, which can be repositioned by
- dragging on its grey border. Tapping on the single button in the iconified
- palette will return it to its full size and to its position before it was
- iconified.
-
- After you open Ruler, you'll usually want to shrink the palette. If you
- don't, you won't be able to open the application you want to measure
- because the crosshair layer covers the entire screen. Once the application
- is open, expand the palette to its full size and start measuring.
-
- The top left button (a vertical or horizontal line) toggles the palette
- between a vertical and horizontal orientation. When you change its
- orientation, the palette will move so it doesn't hang off the edge of the
- screen after it has rotated.
-
- The bottom left button (a diamond) pops up a menu of the following options:
- About Ruler: displays an about box for Ruler.
-
- Print local box:
- prints a viewBounds frame to the Inspector, if it's connected. Since
- this is a local box, the left and top values will be 0, and the right
- and bottom ones will be the width and height of the box formed by the
- crosshairs.
-
- Print global box:
- prints a viewBounds frame to the Inspector, if it's connected. The
- frame will contain the global bounds of the box formed by the crosshairs.
-
- Print view origin:
- prints a frame containing left and top coordinates to the Inspector, if
- it's connected. To calculate these points, Ruler assumes the second
- crosshair is positioned on the view's origin and the first is
- positioned on the origin of the view's parent (or sibling, if it's
- sibling justified). This function is discussed in more detail below.
-
- Measure pixels:
- Measure offset:
- these two options determine what information the third (unoutlined)
- display shows. In the default position, the display will show the
- width and height, in pixels, of the box formed by the two crosshairs.
- If only one crosshair has been set, two dashes will be shown instead.
-
- Selecting "Measure offset" will cause the display to show the offset
- from the first crosshair to the second, in x,y coordinates. In this
- mode you will also be able to drag the crosshairs off the right and
- bottom edges of the screen (coordinates 240 and 320 or 336,
- respectively). The only other difference in these two settings is that
- the pixel values will always be positive and will be one greater than
- the offset values.
-
- It's necessary to have these two options to handle the case where, for
- instance, the x coordinate of the first crosshair is 4 and the x
- coordinate of the second is 2. In this example, the crosshairs span
- 3 pixels, but the offset is -2.
-
- Open iconified:
- selecting this option will cause Ruler to always open in the collapsed,
- iconified mode. You will probably want to leave this item checked,
- because the application you want to measure will likely be covered by
- the Extras Drawer after you open Ruler. To close the Extras Drawer,
- you'll have to iconify Ruler, so this option saves you a step.
-
-
- POSITIONING THE PALETTE
-
- To move the palette around the screen, you can drag it by its grey border.
- Another good way to drag the palette is to put the pen on the width/height
- display, which is easier to hit than the border. When the palette is
- iconified, you can also drag it by its grey border.
-
- Ruler remembers the positions of the full-sized palette and the iconified
- palette separately. This is useful if you want the iconified palette to
- always move to the bottom right corner of the screen, for instance.
-
- While you are dragging the palette, the crosshairs will disappear. They
- will reappear when you stop dragging. This is normal.
-
- If your Newton goes to sleep while Ruler is open, it will be iconified
- the next time you turn the Newton on. It's necessary to do this to keep
- the screen from turning white when you switch the Newton back on.
-
-
- USES FOR RULER
-
- One of the simplest ways to use Ruler is to make sure that two or more
- views are aligned horizontally or vertically. With one crosshair, you
- can just eyeball the alignment. With two, you can use the "Measure
- offset" option to show how much the view bounds need to be changed to
- bring the views into alignment.
-
- With the "Measure pixels" option, it's a snap to measure the width and
- height of a bitmap, assuming there's no extra white space around it,
- which obviously won't show up on a white background.
-
- There are some subtleties to measuring views which you should be aware of.
- If you want to measure the width and height of a view, you must position
- the crosshairs just *inside* the view's border, because borders are drawn
- outside a view's bounds. Remember also that a border can have an inset
- value. If the inset is white, it may look like the border is narrower than
- it really is. The matte border style, for instance, has a 1-pixel white
- inset, so its full width is 6 pixels, even though only 5 are taken up by
- the grey and black lines. To measure a protoFloater view then, you should
- leave one pixel of white space between the crosshairs and the inner grey
- border.
-
- You can make sure several views are the same size or are evenly spaced by
- deactivating both crosshairs. Position them so that the box they form is
- the size you want. Then tap the active crosshair's display, so that both
- displays are outlined in grey, not black. You can now drag the
- crosshairs as a unit and position them anywhere on the screen to check
- that other views are the same size or separated by the same amount.
-
- It's possible to measure the offset of a view from its parent, assuming
- both it and its parents borders are visible. However, the view's
- justification values can complicate this procedure. The best way to see
- this is to load the ViewTest package, which should have been included
- with Ruler. (Note that this package was created on a MP0, so it might
- be messed up a little on a MP110.)
-
- First open Ruler, iconify it, open ViewTest, then expand Ruler and check
- the "Measure offset" option. ViewTest simply displays a few views with
- single pixel borders. Each view shows its bounds and its justification
- values (P = parent, S = sibling, L = left, R = right, T = top, B = bottom).
-
- The top view is justified from its parent's top and left edges, and its
- parent's origin is at (0,0). To find its top and left bounds, position
- the first crosshair at the view's parent's origin (the top, left corner
- of the screen) and position the second crosshair at the view's origin,
- just inside the border. The third display, now labeled X/Y, will show
- the view's origin, (47,42). Not a terribly interesting example.
-
- The second view is more exciting. It's also parent-justified left and top,
- but it's sibilng-justified left and bottom. Its sibling is the first view,
- so you need to position the first crosshair on that view's bottom, left
- corner (which is its origin, as far as the sibling view is concerned).
- However, because of the way view bounds relate to screen pixels, you must
- put the first crosshair *on* the view's bottom border, not inside of it,
- although it should still be inside the left border. Then put the second
- crosshair on the sibling view's origin. The X/Y display should show
- (10,20).
-
- This special case also applies to the right edge. So whenever a view is
- justified to its parent's or sibling's bottom and/or right edge, you must
- position the first crosshair directly on the parent's or sibling's bottom
- and/or right edge. You can see this with the bottommost view in ViewTest.
- It is parent-justified right and bottom. It's parent is the app's base
- view, and the app view fills the entire screen. Since its border is
- off-screen, you must set the first crosshair just off-screen, at (240,336
- or 320). This is why you can drag the crosshairs off the bottom and right
- edges of the screen in "Measure offset" mode.
-
- Play around with ViewTest until you are comfortable with determining the
- top and left bounds of a view.
-
-
- CAVEATS
-
- It is possible to measure floating views with Ruler, but since the view
- floats, it is above the crosshair layer. The crosshairs will be drawn over
- the floating view, but the view will be "live," i.e., you can't tap on it
- to position a crosshair. You can, however, tap somewhere else on the
- screen and drag the crosshair over the floating view. Once you stop
- dragging, you'll need to use the scroller to position the crosshair
- further.
-
- Closing a floating view while Ruler is expanded will leave a white square
- where the view used to be. To restore the screen, iconify and expand the
- palette. You can do this whenever there's garbage on the screen that
- doesn't seem to go away.
-
- Be careful of where you tap to dismiss the popup menu on systems earlier
- than 1.3. Since the crosshair layer is hidden while the popup menu is
- open, whatever is underneath will receive the tap.
-
- If things get really messed up, it is possible for the Ruler palette to
- be closed while the crosshair layer is still open. Tapping on the screen
- should throw an exception, which should cause the crosshair layer to
- close itself. If things get really, really messed up, the crosshair
- layer might be closed but the screen might not update, so that it looks
- like nothing happened but you can hear the Extras Drawer open and close,
- etc. In this case, you have to reset the Newton.
-